"""
refresh 三个取值： true false wait_for 默认是false
    false 默认（不关心刷新时间）
        行为：
            更新操作完成后，不立即触发刷新
            数据进入内存缓冲区，等待ES的自动刷新（约1秒一次）
            在这1秒内，数据不可被搜索，但可以通过get()获取
        适用场景：
            批量数据导入
            对实时性要求不高的场景
            需要最高写入性能的情况
        示例：
            # 批量插入1000条日志（追求性能）
            for log in logs:
                es.index(index="app_logs", body=log, refresh=False)  # 快速写入
            # 所有插入完成后，手动刷新一次
            es.indices.refresh(index="app_logs")

    true 强制立刻刷新
        行为：
            更新操作完成后，立即触发索引刷新
            数据立即可被搜索
            但写入性能会下降（因为要等待刷新完成）
        适用场景：
            需要立即可见的单条重要数据
            开发测试环境（方便调试）
            用户操作后需要立即看到结果的场景
        示例：
            # 用户修改个人资料后，需要立即生效
            es.update(
                index="users",
                id=user_id,
                body={"doc": {"name": "新用户名"}},
                refresh=True  # 用户刷新页面后立即能看到变化
            )

    wait_for 等待刷新完成（不往下走）
        行为：
            更新操作会等待下一次自动刷新完成后才返回响应
            如果自动刷新很快发生，就几乎不等待
            如果自动刷新较慢，会等待最多1秒
            平衡了性能和数据一致性
            数据立即可被搜索
        适用场景：
            需要数据一致性但对延迟有一定容忍度
            生产环境中推荐使用
            避免频繁强制刷新，但又需要相对及时的数据
        示例：
            # 电商订单状态更新
            es.update(
                index="orders",
                id=order_id,
                body={"doc": {"status": "paid"}},
                refresh='wait_for'  # 确保支付状态相对及时可查
            )
"""

from elasticsearch import Elasticsearch

es = Elasticsearch([{"host": "39.108.176.217", "port": 9200}])
update_doc = {
    "content": "99999"
}
id = "58jIfpkBPgHVl09LI1cf"
update_result = es.update(index="my_index", id=id, doc=update_doc, refresh="wait_for")
print(update_result)
print("update doc success")

get_doc = es.get(index="my_index", id=id)
print(f"es.get: \n{get_doc}")

query = {
    "query": {
        "match": {
            "author": "zxp"
        }
    }
}
result = es.search(index="my_index", body=query)
print(f"es.search: \n{result}")
for hit in result["hits"]["hits"]:
    print(hit["_source"])